Android开发中动态获取RecyclerView的Item中EditText的内容

您所在的位置:网站首页 android studio怎么获取文本框内容 Android开发中动态获取RecyclerView的Item中EditText的内容

Android开发中动态获取RecyclerView的Item中EditText的内容

2024-07-10 10:23| 来源: 网络整理| 查看: 265

最近在项目开发中,遇到一个问题,如下图所示

这里我是使用RecyclerView实现这种效果,其Item由一个TextView和一个EditText组成。用户填写相应数据,点击保存按钮,我要对用户输入的数据进行处理。这里我就要获取EditText的内容,首先我想到的是:使用RecyclerView提供的方法,getChildAt(position),一一获取对应的子view,然后进行处理,但令人遗憾的是:这里返回的view为null,奇怪的是recyclerView.getChildCount()能够正常返回。既然此路不通,我们只好换一个思路:通过监听EditText的事件,来返回EditText输入内容,然后调用自己定义的接口,来把数据回调出去。

基于这种思路,我们可以这样修改RecyclerView的adapter,如下所示:

package myapp.alex.com.myapplication; import android.content.Context; import android.support.v7.widget.RecyclerView; import android.text.Editable; import android.text.TextWatcher; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.EditText; import android.widget.TextView; /** * Created by liuweiqiang on 2016/9/7. */ public class CustomerAdapter extends RecyclerView.Adapter { private Context mContext; private String[] mInfos; private String[] mHints; public interface SaveEditListener{ void SaveEdit(int position, String string); } public CustomerAdapter(String[] infos,String[] hints,Context mContext) { this.mInfos=infos; this.mHints=hints; this.mContext = mContext; } @Override public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { MyViewHolder holder = new MyViewHolder(LayoutInflater.from(mContext).inflate( R.layout.item_customer, parent, false)); return holder; } @Override public void onBindViewHolder(final MyViewHolder holder,final int position) { holder.c_name.setText(mInfos[position]); holder.c_name_et.setHint(mHints[position]); //添加editText的监听事件 holder.c_name_et.addTextChangedListener(new TextSwitcher(holder)); //通过设置tag,防止position紊乱 holder.c_name_et.setTag(position); } @Override public int getItemCount() { return mInfos.length; } public class MyViewHolder extends RecyclerView.ViewHolder { TextView c_name;//客户名称 EditText c_name_et;//填写项 public MyViewHolder(View view) { super(view); c_name = (TextView) view.findViewById(R.id.c_name); c_name_et= (EditText) view.findViewById(R.id.c_name_et); } } //自定义EditText的监听类 class TextSwitcher implements TextWatcher { private MyViewHolder mHolder; public TextSwitcher(MyViewHolder mHolder) { this.mHolder = mHolder; } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { } @Override public void afterTextChanged(Editable s) { //用户输入完毕后,处理输入数据,回调给主界面处理 SaveEditListener listener= (SaveEditListener) mContext; if(s!=null){ listener.SaveEdit(Integer.parseInt(mHolder.c_name_et.getTag().toString()),s.toString()); } } } }

adapter这里已经获取EditText内容,在主界面处理的话,我们就要继承接口SaveEditListener,实现SaveEdit(),如下:

@Override public void SaveEdit(int position, String string) { //回调处理edittext内容,使用map的好处在于:position确定的情况下,string改变,只会动态改变string内容 map.put(position,string); }

这样的话,我们就可以动态的存储用户的输入内容,然后对map进行处理

//监听保存 void OnSave(View view){ //处理存储edittext的map //如判断客户名称是否填写且不为空格 if(map.get(0)!=null&&!map.get(0).trim().equals("")){ //遍历处理map存储的内容 for (int i=0;i


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3